<?php


namespace app\index\controller;

use think\Db;
use think\exception\DbException;

/**
 * 数据库查询相关
 * Class DbTest
 * @package app\index\controller
 */
class DbQueryTest
{
    /**
     * 查询单个数据，不存下返回null
     */
    public function test_find()
    {
        try {
            $data = Db::table('t_user')->where('id', 10000024)->find();
            return json($data);
        } catch (DbException $e) {
            return json('查询失败！');
        }
    }

    /**
     * 查询单个数据,不存在抛异常
     */
    public function test_find_fail()
    {
        try {
            $data = Db::table('t_user')->where('id', 10000023)->findOrFail();
            return json($data);
        } catch (DbException $e) {
            dump($e);
            return json('查询失败！');
        }
    }

    /**
     * 查询单个数据,不存在返回空数据
     */
    public function test_find_empty()
    {
        try {
            $data = Db::table('t_user')->where('id', 10000023)->findOrEmpty();
            return json($data);
        } catch (DbException $e) {
            dump($e);
            return json('查询失败！');
        }
    }

    /**
     * 查询多个
     */
    public function test_select()
    {
        try {
            $data = Db::table('t_user')->where('age', 40)->select();
            return json($data);
        } catch (DbException $e) {
            dump($e);
            return json('查询失败！');
        }
    }

    /**
     * 查询多个,查询不到抛异常
     */
    public function test_select_fail()
    {
        try {
            $data = Db::table('t_user')->where('age', 41)->selectOrFail();
            return json($data);
        } catch (DbException $e) {
            dump($e);
            return json('查询失败！');
        }
    }

    /**
     * 查询单个字段,不存在返回null
     */
    public function test_value()
    {
        try {
            $data = Db::table('t_user')->where('id', 10000024)->value('name');
            return json($data);
        } catch (DbException $e) {
            return json('查询失败！');
        }
    }

    /**
     * 查询单列
     */
    public function test_column()
    {
        try {
            $data = Db::table('t_user')->where('age', 40)->column('name');
            return json($data);
        } catch (DbException $e) {
            return json('查询失败！');
        }
    }

    /**
     * 查询单列，指定id作为key
     */
    public function test_column_key()
    {
        try {
            $data = Db::table('t_user')->where('age', 40)->column('name', 'id');
            return json($data);
        } catch (DbException $e) {
            return json('查询失败！');
        }
    }

    /**
     * 数据分批处理
     */
    public function test_chunk()
    {
        try {
            Db::table('t_user')->chunk(1, function ($user) {
                dump($user);
                echo '<hr/>';
                return false;
            });
        } catch (DbException $e) {
            return json('查询失败！');
        }
    }

    /**
     * 大量数据处理(游标)
     */
    public function test_cursor()
    {
        try {
            $cursor = Db::table('t_user')->cursor();
            foreach ($cursor as $item) {
                dump($item);
                echo '<hr/>';
            }
        } catch (DbException $e) {
            return json('查询失败！');
        }
    }


}